[PHP] 實建一個簡易MVC框架


Posted by Engine Lai on 2023-11-15

使用 PHP 建立一個基本的 MVC(模型-視圖-控制器)架構是一個涉及組織程式碼和理解物件導向程式設計(OOP)概念的挑戰。以下是一個非常簡化的範例,展示如何創建一個基礎的 MVC 框架。

目錄結構

首先,創建以下的目錄結構:

mvc/
|-- controllers/
|-- models/
|-- views/
|-- index.php

1. 建立進入點檔案(index.php)

進入點檔案是 MVC 框架的起點。它負責接收請求並根據請求調用相應的控制器。

// index.php
require_once 'controllers/HomeController.php';

$url = $_GET['url'] ?? 'home';

switch ($url) {
    case 'home':
        $controller = new HomeController();
        $controller->index();
        break;
    // 可以增加更多的路由和控制器
    default:
        echo "404 Not Found";
}

2. 定義控制器(controllers/)

控制器負責處理用戶的請求,調用模型獲取數據,然後將數據傳遞給視圖。

// controllers/HomeController.php
require_once 'models/HomeModel.php';
require_once 'views/HomeView.php';

class HomeController {
    public function index() {
        $model = new HomeModel();
        $data = $model->getData();

        $view = new HomeView();
        $view->render($data);
    }
}

3. 建立模型(models/)

模型負責處理所有的數據邏輯。例如,從資料庫中獲取、插入或更新數據。

// models/HomeModel.php
class HomeModel {
    public function getData() {
        // 從資料庫或其他來源獲取數據
        return ['title' => '歡迎來到我的 MVC 框架!'];
    }
}

4. 建立視圖(views/)

視圖負責呈現數據。控制器將數據傳遞給視圖,視圖則生成最終的用戶介面。

// views/HomeView.php
class HomeView {
    public function render($data) {
        echo "<h1>{$data['title']}</h1>";
        // 輸出更多 HTML
    }
}

5. 實現自動加載

在實際應用中,手動引入每個檔案是不實際的。可以使用 PHP 的自動加載功能。

// 在 index.php 中
spl_autoload_register(function ($class_name) {
    if (file_exists('controllers/' . $class_name . '.php')) {
        require_once 'controllers/' . $class_name . '.php';
    } elseif (file_exists('models/' . $class_name . '.php')) {
        require_once 'models/' . $class_name . '.php';
    } elseif (file_exists('views/' . $class_name . '.php')) {
        require_once 'views/' . $class_name . '.php';
    }
});

總結

這只是一個非常基礎的 MVC 框架範例。在實際開發中,可能需要考慮許多其他因素,如路由更複雜的處理、資料庫抽象、模板引擎整合、異常處理、安全性等。


#MVC







Related Posts

每日心得筆記 2020-06-19(五)

每日心得筆記 2020-06-19(五)

路由系統route 路由設計routing

路由系統route 路由設計routing

 [ 學習筆記系列 ] 網頁本質 (三) - JavaScript 篇

[ 學習筆記系列 ] 網頁本質 (三) - JavaScript 篇


Comments